package com.fiap.to;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrePersist;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;

import com.fiap.enums.CombustivelENUM;

@Entity
@Table(name = "AM_CARRO")
public class VeiculoTO implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GenericGenerator(name = "seq_veiculo", strategy = "increment")
	@GeneratedValue(generator = "seq_veiculo")
	@Column(name = "ID_VEICULO")
	private int id_veiculo;
	@Column(length = 4)
	private int ano;
	@Column(length = 4)
	private int anoModelo;
	@ManyToOne(cascade = CascadeType.PERSIST)
	@JoinColumn(name = "ID_CLIENTE")
	private ClienteTO dono;
	@Column(length = 1, nullable = false)
	private CombustivelENUM combustivel;
	@Column(length = 2, nullable = false)
	private ModeloCarroTO modelo;
	@Column(length = 7, nullable = false)
	private String placa;
	@Column(length = 20, nullable = false)
	private String cor;
	@Column(length = 11)
	private int renavam;
	@OneToMany(cascade=CascadeType.PERSIST, fetch=FetchType.LAZY)
	@JoinColumn(name = "ID_OPCIONAIS")
	private List<OpcionalTO> itensOpcionais;

	@PrePersist
	private void executaAntesDePersistir() {
		System.out.println("Persistindo...");
	}

	public VeiculoTO() {
		super();
		// TODO Auto-generated constructor stub
	}

	public VeiculoTO(int id_veiculo, int ano, int anoModelo, ClienteTO dono,
			CombustivelENUM combustivel, ModeloCarroTO modelo, String placa,
			String cor, int renavam, ArrayList<OpcionalTO> itensOpcionais) {
		super();
		this.id_veiculo = id_veiculo;
		this.ano = ano;
		this.anoModelo = anoModelo;
		this.dono = dono;
		this.combustivel = combustivel;
		this.modelo = modelo;
		this.placa = placa;
		this.cor = cor;
		this.renavam = renavam;
		this.itensOpcionais = itensOpcionais;
	}

	public int getId_veiculo() {
		return id_veiculo;
	}

	public void setId_veiculo(int id_veiculo) {
		this.id_veiculo = id_veiculo;
	}

	public int getAno() {
		return ano;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public int getAnoModelo() {
		return anoModelo;
	}

	public void setAnoModelo(int anoModelo) {
		this.anoModelo = anoModelo;
	}

	public ClienteTO getDono() {
		return dono;
	}

	public void setDono(ClienteTO dono) {
		this.dono = dono;
	}

	public CombustivelENUM getCombustivel() {
		return combustivel;
	}

	public void setCombustivel(CombustivelENUM combustivel) {
		this.combustivel = combustivel;
	}

	public ModeloCarroTO getModelo() {
		return modelo;
	}

	public void setModelo(ModeloCarroTO modelo) {
		this.modelo = modelo;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}

	public String getCor() {
		return cor;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	public int getRenavam() {
		return renavam;
	}

	public void setRenavam(int renavam) {
		this.renavam = renavam;
	}

	public List<OpcionalTO> getItensOpcionais() {
		return itensOpcionais;
	}

	public void setItensOpcionais(List<OpcionalTO> itensOpcionais) {
		this.itensOpcionais = itensOpcionais;
	}

}
